const mysql = require("mysql");

/**
 * 连接 MySQL 服务器，发送 SQL 语句，并返回一个 Promise
 * @param {string} sql 要执行的sql语句
 */
function query(sql, params = []) {
    // 创建链接
    const con = mysql.createConnection({
        host: "localhost",
        port: 3306,
        user: "root",
        password: "root",
        database: "koa-api",
    });

    // 让 JS 引擎等待
    // await 右侧只能跟 Promise 对象
    // Promise 就是用来封装异步操作的
    // await 会一直等待，等待什么呢？
    // 等待这个 Promise 对象被 resolve 或者 reject 时，才会继续向下执行
    return new Promise((resolve, reject) => {
        // 发送 SQL 语句
        con.query(sql, params, (error, data) => {
            if (error) {
                reject(error);
            } else {
                resolve(data);
            }
            // 告诉服务器，我执行完了，不发 SQL 了。
            con.end();
        });
    });
}

module.exports = { query };
